#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <vector>
#include <functional>

void handler(int num)
{
    //std::cout<<"捕获到信号"<<num<<std::endl;
}

int main()
{
    signal(11,handler);
    signal(8,handler);

    int a=10;
     a/=0;
     int*p=nullptr;
     *p=10;
    while(true)
    {
        std::cout<<"hello world"<<std::endl;
    };
    return 0;
}

// using func_t = std::function<void()>;

// int gcount = 0;
// std::vector<func_t> gfuncs;

// // 把信号 更换 成为 硬件中断
// void hanlder(int signo)
// {
//     for (auto &f : gfuncs)
//     {
//         f();
//     }
//     std::cout << "gcount : " << gcount << std::endl;
//     alarm(1);
// }

// int main()
// {
//     gfuncs.push_back([]()
//                      { std::cout << "我是一个内核刷新操作" << std::endl; });

//     gfuncs.push_back([]()
//                      { std::cout << "我是一个检测进程时间片的操作，如果时间片到了，我会切换进程" << std::endl; });

//     gfuncs.push_back([]()
//                      { std::cout << "我是一个内存管理操作，定期清理操作系统内部的内存碎片" << std::endl; });

//     alarm(1); // 一次性的闹钟，超时alarm会自动被取消
//     signal(SIGALRM, hanlder);

//     while (true)
//     {
//         pause();
//         std::cout << "我醒来了..." << std::endl;
//         gcount++;
//     }
// }

// int count = 0;
// void handler(int signumber)
// {
//     std::cout << "count : " << count << std::endl;
//     exit(0);
// }
// int main()
// {
//     signal(SIGALRM, handler);
//     alarm(1);
//     while (true)
//     {
//         count++;
//     }
//     return 0;
// }

// int main()
// {
//     int count = 0;
//     alarm(1);
//     while (true)
//     {
//         std::cout << "count : "
//                   << count << std::endl;
//         count++;
//     }
//     return 0;
// }

// #include <sys/types.h>
// void handler(int signumber)
// {
//     std::cout<<"捕获到信号"<<signumber<<"，开始执行自定义处理方法"<<std::endl;
// }

// int main()
// {
//     for(int i=1;i<=31;++i)
//     {
//         signal(i,handler);
//     }

//     while(true)
//     {
//         std::cout<<"I am "<<getpid()<<" , I am waiting signal!"<<std::endl;
//         sleep(3);
//     }
//     return 0;
// }